A concern in the design and verification of systems is dependencies. Dependencies may be static, remaining the same over the life of the system, or they may change over time.
A dependency is a relationship between two items within which a change to one item, the independent object(s) may affect the meaning of the other item, the dependent object. For example, the dependency rule that object A depends on object B, object C, and object D may be illustrated as follows:A→B C D
A dependent object in one dependency rule may be an independent object in another dependency rule. In addition, it is often not desirable to have circular dependencies in a system. The following three dependency rules, for example, result in a circular dependency:A→BB→CC→A
In particular, if A, B, and C, in the above example, are vehicles in different locations of a road and the dependency refers to the right of way, circular dependency cannot be allowed in order to avoid an accident.
One approach for determining the existence of circular dependency is to manually review the dependency rules. This process is typically time consuming and labor intensive. In addition, as the number of dependency rules increases, it is difficult, if not impossible, to manually check for circular dependency.
Therefore, there is a need for further methods for determining the existence of circular dependency in a plurality of dependency rules.